1、表示数值得字符串
思想：最关键一步就是最后返回时，得判断是否有数字出现，因为e后面必跟数字，所以如果发现e后面无数字，那么肯定不对
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @return bool布尔型
     */
    bool isNumeric(string str) {
        // write code here
        if(str.empty())
            return true;
        int isdot=0;//表示点是否出现过
        int ise=0;//表示e是否出现过
        int isflag=0;//表示+-是否出现过
        int isnum=0;//是否有数字出现
        for(int i=0;i<str.size();i++)
        {
            if(str[i]>='0'&&str[i]<='9')
                isnum=1;
            if((str[i]!='e'&&str[i]!='E'&&str[i]!='+'&&str[i]!='-'&&str[i]!='.')&&(str[i]<'0'||str[i]>'9'))
                return false;
            else 
            {
                if(str[i]=='e'||str[i]=='E')
                {
                    if(ise==1||isnum==0)
                        return false;
                    isflag=isnum=0;
                    ise=1;
                }
                else if(str[i]=='+'||str[i]=='-')
                {
                    if(isflag==1||isnum==1)
                        return false;
                    isflag=1;
                }
                else if(str[i]=='.')
                {
                    if(isdot==1||ise==1)
                        return false;
                    isdot=1;
                }
            }
        }
        //这一步很关键，因为是判断e后面是否还有数字，e后面只能跟+/-或数字
        return isnum==1?true:false;
    }
};
2、二叉树得下一个节点
思想：就是画图得出结论，判断当前节点是否有右孩子，分3种情况
有右孩子那么中序得下一个节点计数右子树最左节点
无右孩子并且该节点时父亲得左孩子，那么下一个几点就是其父节点
无右孩子并且该节点是父亲得右孩子，那么其下一个节点是其父亲节点为祖父节点得左孩子的 祖父节点，也就是往上找其祖父的左孩子为其”父亲“的节点
/*
struct TreeLinkNode {
    int val;
    struct TreeLinkNode *left;
    struct TreeLinkNode *right;
    struct TreeLinkNode *next;
    TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
        
    }
};
*/
class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode) {
        if(pNode==nullptr)
            return nullptr;
        //如果当前节点有右孩子
        if(pNode->right)
        {
            TreeLinkNode* cur=pNode;
            pNode=pNode->right;
            while(pNode)
            {
                cur=pNode;
                pNode=cur->left;
            }
            return cur;
        }
        else
        {
            if(pNode->next==nullptr||pNode==pNode->next->left)
            {
                return pNode->next;
            }
            else
            {
                TreeLinkNode* p=pNode->next;
                TreeLinkNode* pp=p->next;
                while(pp&&p!=pp->left)
                {
                    p=pp;
                    pp=p->next;
                }
               return p->next;
            }
            
        }
        return nullptr;
    }
};